/* 
 * Created by 2019年1月25日
 */
package com.edev.support.dao;

import java.util.Collection;
import java.util.Map;

/**
 * 通用查询数据访问接口（动态查询）
 * <p>
 * 核心功能：
 * 1. 执行动态条件查询
 * 2. 获取查询结果总数（分页场景）
 * 3. 支持聚合统计操作
 * <p>
 * 典型使用场景：
 * - 复杂条件组合查询
 * - 报表数据统计
 * - 动态分页查询
 */
public interface QueryDao {
    /**
     * 执行动态条件查询
     * <p>
     * 参数示例：
	 * <pre>
     * {
     *   "name": "John",
     *   "ageGt": 20, "ageLt":30,
     *   "status": ["ACTIVE", "PENDING"]
     * }
	 * </pre>
	 * 主意：参数的内容及数据类型应当与SQL查询语句中的参数相匹配。
     * @param params 查询参数（支持嵌套Map结构）
     * @return 查询结果集合（元素类型根据映射配置决定）
     */
    Collection<?> query(Map<String, Object> params);
    
    /**
     * 获取查询结果总记录数（用于分页）
     * @param params 查询条件参数（与query方法一致）
     * @return 符合条件的结果总数
     */
    long count(Map<String, Object> params);
    
    /**
     * 执行聚合统计操作
     * <p>
     * 参数格式示例：
     * {
	 *   "page": 0,
     *   "size": 10,
     *   "aggregation": {
     *     "department": "count",
     *     "salary": "sum"
     *   }
     * }
     * @param params 聚合参数（需包含aggregation键）
     * @return 统计结果映射（键为字段名，值为统计结果）
     */
    Map<String, Object> aggregate(Map<String, Object> params);
}
